#ifndef _UART_H_
#define _UART_H_

#include "STMFCT.h"

typedef struct
{
    bool send_flag;
    uint16_t BUF_SIZE;
    uint8_t *BUF_TEMP;
    uint16_t BUF_POINTER_BEGIN;
    uint16_t BUF_POINTER_END;
} UARTx_Typedef;

#define UARTx_bufAvailable(UARTx) ((UARTx->BUF_POINTER_END - UARTx->BUF_POINTER_BEGIN + UARTx->BUF_SIZE) % UARTx->BUF_SIZE)

// UART1
#define UART1_BUF_SIZE 30

// UART2
#define UART2_BUF_SIZE 30

// UART3
#define UART3_BUF_SIZE 30

UARTx_Typedef* UART_pointer(USART_TypeDef* USARTx);
void UARTx_init(USART_TypeDef *USARTx, uint32_t baud);
bool UARTx_sendByte(USART_TypeDef *USARTx, const uint8_t byte);
bool UARTx_sendString(USART_TypeDef *USARTx, uint8_t *str);
bool UARTx_receiveString(USART_TypeDef *USARTx, uint8_t **str);

#endif
